#工厂
简单工厂
import java.util.Scanner;
interface Video{ //定义一个接口
public abstract void Type();
}
class Battle implements Video{ //继承接口
Battle(){
System.out.println("战斗类的动漫有");
}
@Override
public void Type() {
System.out.println("进击的巨人");
}
}
class Love implements Video{
Love(){
System.out.println("爱情类的动漫有");
}
@Override
public void Type() {
System.out.println("辉月大小姐想让我告白");
}
}
class Adolescence implements Video{
Adolescence(){
System.out.println("青春校园类的动漫有");
}
@Override
public void Type() {
System.out.println("某科学的超电磁炮");
}
}
class LfeTime implements Video{
LfeTime(){
System.out.println("日常生活型的动漫有");
}
@Override
public void Type() {
System.out.println("银魂");
}
}
public class Factory {
public static void main(String[] args){
Scanner in=new Scanner(System.in);
int x;
x=in.nextInt();
switch (x){ //根据用户的不同需求推荐不同的动漫
case 1:Battle a=new Battle();a.Type(); break; //通过new一个新对象,再调用其方法来输出
case 2:Love b=new Love();b.Type();break;
case 3:Adolescence c=new Adolescence();c.Type();break;
case 4:LfeTime d=new LfeTime();d.Type();break;
default:System.out.println("没有此类型的动漫推荐哦~");
}
}
}
以上为一个简单工厂的代码,关于简单工厂:
- 它的产品级比较少,且比较直接。
- 但是它的内容更加狭隘,比如这个例子就只有动漫这一个大类,它的推荐都是在动漫中选择。
- 比较适合数量少且简单的产品模式。
abstract class vedio{ //定义一个抽象类,表示所有视频
}
class Comic extends vedio{ //动漫类继承视频
Comic(){
System.out.println("动漫推荐有:");
}
}
class detailComicRough extends Comic{ 动漫中的热血战斗类继承动漫类
public void run(){
System.out.println("进击的巨人");
}
}
class detailComicLove extends Comic{
detailComicLove(){
System.out.println("辉月大小姐想让我告白");
}
}
class Film extends vedio{
Film(){
System.out.println("电影推荐有");
}
}
class detailFilmWar extends Film{
public void run(){
System.out.println("战狼");
}
}
class detailFilmArt extends Film{
public void run(){
System.out.println("海上钢琴师");
}
}
class Cartoon extends vedio{
Cartoon(){
System.out.println("动画片推荐有:");
}
}
class detailCartoonEdecation extends Cartoon{
public void run(){
System.out.println("葫芦娃");
}
}
class detailCartoonCute extends Cartoon{
public void run(){
System.out.println("小马宝莉");
}
}
abstract class Choice{ //定义一个选择抽象类
public abstract Comic choicecomic(String r) throws Exception;
public abstract Film choicefilm(String r) throws Exception;
public abstract Cartoon choicecartoon(String r) throws Exception;
}
class Chioce2 extends Choice{ //抽象选择(热血类)类继承选择类,并重写其方法
@Override
public Comic choicecomic(String r) { //这里参考了其他博主的视频
return new detailComicRough(); //返回热血类动漫类
}
@Override
public Film choicefilm(String r) {
return new detailFilmWar(); //返回战斗热血类电影类
}
@Override
public Cartoon choicecartoon(String r) {
return new detailCartoonEdecation();
}
}
class Chioce3 extends Choice{
@Override
public Comic choicecomic(String r) {
return new detailComicLove();
}
@Override
public Film choicefilm(String r) {
return new detailFilmArt();
}
@Override
public Cartoon choicecartoon(String r) {
return new detailCartoonEdecation();
}
}
public class Dsign {
public static void main(String[] args){
detailComicRough c=new detailComicRough(); //最后调用的的是具体类,额,这是
c.run();
}
}
这个是一个抽象工厂,相较而言它的情况更复杂:
1.它的产品级更多,视频分为了动漫,电影和动画片,而且动漫之下也分了两小类。
2.如果要添加产品的话也会更加复杂,相较于简单工厂,会需要更多的代码量。
3.还另写了一个抽象类来控制返回各个类,有利于客户直接调用,但是我这个代码不够好,并没有更方便返回对象,就算返回之后,又不知道怎样来调用返回的对象。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
##总结
- 工厂模式是经过不断代码实 *** 总结出来的,更方便的一套模板。
- 它主要是通过客户需求然后调用类来满足客户。
- 通过定义接口或者抽象类,让产品产生有一套模式,再给客户使用,但是,抽象接口更为复杂,它的产品级也更复杂,它会负责产品的生产,还有分类,来满足客户不同的需求,客户只需要选择产品,然后抽象工厂会把它产生分类再送到客户面前。
- 但是由于抽象工厂更复杂的原因,它的产品添加改动的代码也更多,改动起来没有简单工厂那么方便。
- 大概也就是越复杂越好用的东西,要改变就需要越多的精力,而简单的东西,改变很简单但是它的功能也很有限。
- 以上是我的体会,我学的很浅,如果有不对的请大佬指出。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)