zoukankan      html  css  js  c++  java
  • 设计模式之工厂模式(简单工厂模式)

    1.为什么要用工厂模式

    @1实例化对象不希望公开进行(new)

    @2初始化的耦合问题

    @3当代吗出现大量具体类的时候,一旦加入新的具体类就必须修改原有代码

    @4将实例化具体类的代码从应用中抽离或者封装起来,使他们不会干扰应用的其他部分

    @5当要创建的对象很多或者以后要增加对象时,封装这些要创建对象的代码

    2.分类:简单工厂模式,工厂方法模式,抽象工厂模式

    3.代码实战:

    @1要生产的对象超类:

     1 package com.pattern.simplefactory;
     2 /*
     3  * 产品超类,披萨,每一种披萨都要经过下面的步骤卖给消费者
     4  */
     5 public abstract class Pizze {
     6     
     7     
     8     abstract void prepare();//准备
     9     
    10     abstract void bake();//烘烤
    11     
    12     /*切片*/
    13     abstract void cut();
    14     
    15     /*打包*/
    16     abstract void box();
    17     
    18     /*销售*/
    19     abstract void sale();
    20 
    21 }

    @2对象超类的子类

     1 package com.pattern.simplefactory;
     2 
     3 /**
     4  * 芝士披萨
     5  * @author Administrator
     6  *
     7  */
     8 public class CheesePizze extends Pizze {
     9 
    10     @Override
    11     void prepare() {
    12         System.out.println("cheesepizze prepare");
    13 
    14     }
    15 
    16     @Override
    17     void bake() {
    18         System.out.println("cheesepizze bake");
    19 
    20     }
    21 
    22     @Override
    23     void cut() {
    24         System.out.println("cheesepizze cut");
    25 
    26     }
    27 
    28     @Override
    29     void box() {
    30         System.out.println("cheesepizze box");
    31 
    32     }
    33 
    34     @Override
    35     void sale() {
    36         System.out.println("cheesepizze sale ten yuan");
    37 
    38     }
    39 
    40 }
     1 package com.pattern.simplefactory;
     2 
     3 /**
     4  * 番茄披萨
     5  * @author Administrator
     6  *
     7  */
     8 public class VeggiePizze extends Pizze {
     9 
    10     @Override
    11     void prepare() {
    12         System.out.println("veggiepizze prepare");
    13 
    14     }
    15 
    16     @Override
    17     void bake() {
    18         System.out.println("veggiepizze bake");
    19 
    20     }
    21 
    22     @Override
    23     void cut() {
    24         System.out.println("veggiepizze cut");
    25 
    26     }
    27 
    28     @Override
    29     void box() {
    30         System.out.println("veggiepizze box");
    31 
    32     }
    33 
    34     @Override
    35     void sale() {
    36         System.out.println("veggiepizze sale ten yuan");
    37 
    38     }
    39 
    40 }
     1 package com.pattern.simplefactory;
     2 
     3 /**
     4  * 沙拉披萨
     5  * @author Administrator
     6  *
     7  */
     8 public class SalaPizze extends Pizze {
     9 
    10     @Override
    11     void prepare() {
    12         System.out.println("salapizze prepare");
    13 
    14     }
    15 
    16     @Override
    17     void bake() {
    18         System.out.println("salapizze bake");
    19 
    20     }
    21 
    22     @Override
    23     void cut() {
    24         System.out.println("salapizze cut");
    25 
    26     }
    27 
    28     @Override
    29     void box() {
    30         System.out.println("salapizze box");
    31 
    32     }
    33 
    34     @Override
    35     void sale() {
    36         System.out.println("salapizze sale ten yuan");
    37 
    38     }
    39 
    40 }

    @3对象生产工厂,专门负责生产披萨对象,代替客户端去new对象

     1 package com.pattern.simplefactory;
     2 /*
     3  * 披萨工厂,为所有披萨分装创建对象的代码,只做一件事即生产披萨对象
     4  */
     5 public class SimplePizzeFactory {
     6     
     7     public static Pizze createPizze(String type){//根据需要的类型生产对应的披萨
     8     
     9         Pizze pz = null;
    10         if(type.equals("cheese")){//芝士披萨
    11             pz = new CheesePizze();
    12         }else if(type.equals("veggie")){//番茄披萨
    13             pz = new VeggiePizze();
    14         }
    15         else if(type.equals("sala")){//沙拉披萨
    16             pz = new  SalaPizze();
    17         }
    18         
    19         return pz;
    20         
    21     }
    22 
    23 }

    @4需要对象的客户端,披萨商店

     1 package com.pattern.simplefactory;
     2 
     3 /*
     4  * 披萨商店,需要披萨对象来进行处理并销售
     5  */
     6 public class PizzeStore {
     7     
     8     
     9     
    10     public static void main(String[] args) {
    11 
    12         Pizze pz;
    13         pz = SimplePizzeFactory.createPizze("sala");//让披萨工厂生产一个沙拉披萨,不需要自己再去new出来
    14         pz.prepare();
    15         pz.bake();
    16         pz.cut();
    17         pz.box();
    18         pz.sale();
    19 
    20     }
    21     
    22     
    23 
    24 }

    4.再看看运行结果

    需要程序源码的可以加我微信x241602私聊。
  • 相关阅读:
    python面试的100题(2)
    面试题目和地址
    python面试的100题(1)
    no module named系列问题解决
    ubuntu16.04无法打开终端
    Reinforcement Learning,微信公众号:DRL学习
    Java中的I/O操作File
    Java中的Date时间转换【SimpleDateFormat (parse和format)】和Calendar日历表
    重写equals方法
    Java中栈,堆,常量池的简单理解
  • 原文地址:https://www.cnblogs.com/huipengbo/p/6954295.html
Copyright © 2011-2022 走看看