简单工厂与抽象工厂

简单工厂与抽象工厂,第1张

#工厂
简单工厂

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("没有此类型的动漫推荐哦~");
               }
    }
}

以上为一个简单工厂的代码,关于简单工厂:

  1. 它的产品级比较少,且比较直接。
  2. 但是它的内容更加狭隘,比如这个例子就只有动漫这一个大类,它的推荐都是在动漫中选择。
  3. 比较适合数量少且简单的产品模式。
 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.还另写了一个抽象类来控制返回各个类,有利于客户直接调用,但是我这个代码不够好,并没有更方便返回对象,就算返回之后,又不知道怎样来调用返回的对象。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
##总结

  1. 工厂模式是经过不断代码实 *** 总结出来的,更方便的一套模板。
  2. 它主要是通过客户需求然后调用类来满足客户。
  3. 通过定义接口或者抽象类,让产品产生有一套模式,再给客户使用,但是,抽象接口更为复杂,它的产品级也更复杂,它会负责产品的生产,还有分类,来满足客户不同的需求,客户只需要选择产品,然后抽象工厂会把它产生分类再送到客户面前。
  4. 但是由于抽象工厂更复杂的原因,它的产品添加改动的代码也更多,改动起来没有简单工厂那么方便。
  5. 大概也就是越复杂越好用的东西,要改变就需要越多的精力,而简单的东西,改变很简单但是它的功能也很有限。
  6. 以上是我的体会,我学的很浅,如果有不对的请大佬指出。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/874448.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存