zoukankan      html  css  js  c++  java
  • 设计模式(二):工厂模式

    一.工厂模式的定义:    

        定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类

        由产品工厂(接口)规定规范,由产品子类进行实现,当增加产品时,只需要扩展一个新的类去实现这个接口,并由客户端向上转型调用。

    二.例子类图表示

     

     fruitFactory:定义了一个水果工厂的接口,并提供一些公共的方法体,供子类实现自己的内容。

    fruit:定义了一个方法,使子类实现一个方法设置水果名。

    waterlemonFactory、orangeFactory:属于fruitFactory接口的实现类,用于实现各自的功能。

    orange、waterlemon:属于fruit的实现类。

    三.基本代码演示

    interface:

     1 package com.cllover.factory;
     2 
     3 /*
     4 * 水果的规范
     5 * */
     6 public interface fruit {
     7 
     8     //定义水果的名字   
     9     public void name();
    10 }
    fruit
     1 package com.cllover.factory;
     2 
     3 /*
     4 * 食品工厂:定义生产的水果的规范
     5 * */
     6 public interface fruitFactory {
     7 
     8     //什么味道
     9     public void teste();
    10     //什么颜色
    11     public void color();
    12     //上交什么水沟工厂
    13     public fruit upSubfruit();
    14 }
    fruitFactory

     implements fruitFactory:

     1 package com.cllover.factory;
     2 
     3 /*
     4 * 收到规范后并在自己的工厂进行生产
     5 * */
     6 public class OrangeFactory implements fruitFactory {
     7 
     8 
     9 
    10     @Override
    11     public void teste() {
    12         System.out.println("OrangeFactory:-->我尝起来酸甜可口。。。");
    13     }
    14 
    15     @Override
    16     public void color() {
    17         System.out.println("OrangeFactory:-->我以橙色没主。。。");
    18     }
    19 
    20     @Override
    21     public fruit upSubfruit() {
    22         System.out.println("OrangeFactory:-->orange生产完成上交工厂");
    23         return new Orange();
    24     }
    25 
    26 
    27 
    28 }
    OrangeFactory
     1 package com.cllover.factory;
     2 
     3 /*
     4 *   遵从工厂的决定生产自己的产品
     5 * */
     6 public class WatermelonFactory implements fruitFactory {
     7 
     8     @Override
     9     public void teste() {
    10         System.out.println("WatermelonFactory:-->我吃起来非常甜。。。");
    11     }
    12 
    13     @Override
    14     public void color() {
    15         System.out.println("WatermelonFactory:-->我的颜色很复杂。。。");
    16     }
    17 
    18     @Override
    19     public fruit upSubfruit() {
    20         System.out.println( "WatermelonFactory:-->Watermelon生产完成上交工厂");
    21         return new Watermelon();
    22     }
    23 
    24 }
    WatermelonFactory

    implements fruit:

    1 package com.cllover.factory;
    2 
    3 public class Orange implements fruit {
    4     @Override
    5     public void name() {
    6 
    7         System.out.println("Orange:-->我是橘子。。。");
    8     }
    9 }
    Orange
    1 package com.cllover.factory;
    2 
    3 public class Watermelon implements fruit {
    4     @Override
    5     public void name() {
    6         System.out.println("Watermelon:-->我是西瓜。。。");
    7     }
    8 }
    Watermelon

    client客户端调用:

     1 package com.cllover.factory;
     2 
     3 import com.sun.org.apache.xpath.internal.operations.Or;
     4 
     5 public class customerClient {
     6     public static void main(String[] args) {
     7 
     8 
     9         //向上转型
    10         fruitFactory factory = new OrangeFactory();
    11         //调用upSubfruit()
    12         fruit OrangeFruit = factory.upSubfruit();
    13         //输出名字
    14         OrangeFruit.name();
    15         //输出味道
    16         factory.teste();
    17         //输出色彩
    18         factory.color();
    19         System.out.println("customerClient:-->我将购买产品并。。。");
    20 
    21 
    22     }
    23 }
    customerClient

    四.优缺点

    对于一个新产品的发布,无需更改其他工厂的代码。只需要新建2个类并去实现去fruitFactory/fruit接口即可。

    但是对于一个产品需要增加、改变、删除新的功能来说,需要添加、并且修改和删除在接口中的方法。与此同时,各实现类并会进行相应的添加、修改、删除方法进行实现。也就是说,每当接口中方法出现变动时,变会修改不少代码,

    对于不需要经常变化的功能来讲,工厂方法模式具有相应的好处。

  • 相关阅读:
    Repeatable Read
    Read Committed
    Read Uncommitted
    sql 事务
    实用sql语句
    管理mysql
    mysql
    sql delete语句
    sql update语句
    sql INSERT语句
  • 原文地址:https://www.cnblogs.com/CllOVER/p/13324499.html
Copyright © 2011-2022 走看看