工厂设计模式

 

                简单的工厂设计模式
    
 例子: 任意定制交通工具的类型和生产过程
 
 首先定义一个接口,或者抽象类:
 
 1. 用来描述工具的类,所有子类的父类:
 
   public interface Moveable {
      public abstract void run();
   }
   
 2.  定义一个接口或抽象类,用来产生交通工具;
 
   public abstract class VehicleFactory {
      abstract Moveable create();
    }
  
    3.  定义一个交通工具:描述该交通工具的行为;
 
   public class Car implements Moveable{
    public void run(){
     System.out.println("车冒着烟......");
    }
   }
 
    4.  定义一个工厂,用来生产car的
    public class CarFactory extends VehicleFactory{
     @Override
     Moveable create() {
      return new Car();
     }
    }
 
 5.  最后使用: 同面向对象的多态,父类对象指向子类引用。
 
    VehicleFactory factory = new CarFactory();
    Moveable moveable = factory.create();
    moveable.run();
    
   简单工厂设计模式:
     1. 定义一个,一个类型的子类的父类,比如定义一个具体交通工具的父类。
                 抽取子类共有的方法:
    2. 定义一个抽象类,用来产生,接口的子类对象:
  
    3. 定义一个具体的交通工具,实现接口。
   
    4. 定义一个具体的工厂,实现抽象类。
   
    5.使用多态,先得到工厂产生对象,然后调用对象的方法:
   
   
   
    优点:
        1.良好的封装性,代码结构清晰:
    
        如果一个调用者需要具体的一个产品对象,只要知道这个产品的类名就可以了,
       不用知道创建对象的艰苦过程,降低了模块间的耦合性。
    
    
    2. 工厂方法模式的扩展性非常优秀:
   
        如果要添加,一个具体产品,只需要添加这个产品的类,然后去实现抽象方法,
       在抽象类中添加一个共有方法也很容易的:
       维护性:好对共有部分进行维护,很方便:
   
   
    缺点:

             产生产品系列的时候,会出现产品工厂患难;
             产生产品品种的时候,要改变太多。
        

                                                 抽象工厂设计模式
  
  定义: 抽象工厂生产了一系列产品,如果你想换掉一些列产品的时候
         或者想对这一系列产品基础之上扩展,想产生新的系列产品,
   以及想对这一系列的产品的生产过程进行控制,用抽象工厂.
   
    1.抽取这一系列的每一个具体产品的父类,作为抽象类,抽取公共的方法作为抽象方法。
   
    public abstract class Food {
     public abstract void eatting();
     }
     public abstract class Vehicle {
      public abstract void run();
                 }
                public abstract  class Weapon {
     public abstract void shooting();
    }
    
    2.抽取产生一系列产品的工厂的父类,作为抽象类,产生系列产品的共有方法作为抽象方法
   
          public abstract class AbstractFactory {
    public abstract Vehicle createVehicle();
    public abstract Weapon createWanpon();
    public abstract Food createFood();
   }
   
    3.具体的每一个产品去继承共有的抽象类,实现共有的抽象方法:
      
   第一个系列的产品:
   
    public class AK47 extends Weapon{
    @Override
    public void shooting() {
     System.out.println("嗒嗒.....");
      }
   }
   
   public class Apple extends Food {
    @Override
    public void eatting() {
     System.out.println("apple.....");
    }
   }
   
   public class Car extends Vehicle {
    public void run(){
     System.out.println("冒着烟前进.....");
    }
   }
  
      第二个系列的产品:
   
   public class Broom extends Vehicle  {
    @Override
    public void run() {
     System.out.println("一路沙尘暴飞奔而来....");
    }
   }
   
      public class MagicStick extends Weapon{
    @Override
    public void shooting() {
     System.out.println("shoting hu hu hu ......");
    }
   }
   
   public class MushRoom extends Food{
    @Override
    public void eatting() {
     System.out.println("mushroom......");
    }
   }
          4. 具体的一个系列实现抽象抽象工厂类,实现抽象方法:

      第一种系列的工厂:
   
    
     public class DefaultFactory extends AbstractFactory{
     @Override
     public Food createFood() {
      return new Apple();
     }
     @Override
     public Vehicle createVehicle() {
      return new Car();
     }
     @Override
     public Weapon createWanpon() {
      return new AK47();
     }
    }
   
    第二种系列的产品工厂类:
   
    public  class MagicFactory extends AbstractFactory{
    @Override
    public Food createFood() {
     return new MushRoom();
    }
    @Override
    public Vehicle createVehicle() {
     return new Broom();
    }
    @Override
    public Weapon createWanpon() {
     return new MagicStick();
    }
   }
   
    5. 使用:
   
    第一种系列:
   
  public static void main(String [] args){
   AbstractFactory df = new  MagicFactory();
   Food food = df.createFood();
   food.eatting();
   Vehicle vehicle = df.createVehicle();
   vehicle.run();
   Weapon wanpon = df.createWanpon();
   wanpon.shooting();
 }
 
 
    第二种系列:
 public static void main(String [] args){
   AbstractFactory df = new  MagicFactory();
   Food food = df.createFood();
   food.eatting();
   Vehicle vehicle = df.createVehicle();
   vehicle.run();
   Weapon wanpon = df.createWanpon();
   wanpon.shooting();
 }  
 
    优点:
       1.只要改变工厂,就能改变所有的产品
    2. 很方便在原产品上的扩展,只要分别在每一个抽象类中添加,共有的方法,就能
           很容易的改变产品:
    例子: 比如手机的显示风格:只要改变一种风格,布局显示的背景等都改变了,这就用到
          了抽象工厂设计模式:
   
   
   
 

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值