• 由歌词引发的模式思考之上篇(FactoryMethod模式)


        “老张开车去东北 撞了 肇事司机耍流氓 跑了 多亏一个东北人 送到医院缝五针 好了 ……翠花,上酸菜”

        “老张开车去东北”,OK,这里如果我们刻意的用OO思想来看的话,老张这次是开车去的,下次就有很可能开飞机去的……这里请允许我刻意的这样的思考这个问题,因为刻意的这样思考,我们可以从这句话发现两个蕴含的设计模式,一个是FactoryMethod,一个是AbstractFactory。

    一、FactoryMethod

        FactoryMethod模式

        OK,回到这句歌词,正如上面所说的,这次开车,下次开飞机……所以我们要思考出一种不管是车还是飞机或者火车,我们的程序都能灵活的适应需求的变化,这里就会用到FactoryMethod模式。

       

    1 public interface Moveable {
    2     void run();
    3 }
    1 public class Car implements Moveable {
    2 
    3     @Override
    4     public void run() {
    5         System.out.println("car run");
    6     }
    7 
    8 }
    1 public class Plane implements Moveable {
    2 
    3     @Override
    4     public void run() {
    5         System.out.println("plane fly");
    6     }
    7 
    8 }
    1 public abstract class VicheleFactory {
    2     abstract Moveable create();
    3 }
    1 public class CarFactory extends VicheleFactory {
    2 
    3     @Override
    4     public Moveable create() {
    5         return new Car();
    6     }
    7 
    8 }
    1 public class PlaneFactory extends VicheleFactory {
    2 
    3     @Override
    4     public Moveable create() {
    5         return new Plane();
    6     }
    7 
    8 }
    1 public class Test {
    2     public static void main(String[] args) {
    3 //        VicheleFactory factory = new CarFactory();
    4         VicheleFactory factory = new PlaneFactory();
    5         Moveable m = factory.create();
    6         m.run();
    7     }
    8 }

        所有的工厂以及产品都有自己的父类,这个父类规定好自己的子类的方法特性,可以任意的扩展,这样测试类调用的时候只需要做小小的改动就可以响应需求的变化。

        FactoryMethod类结构

     

        由图可知,工厂和产品的父类处于相互平行的层次,而具体实现工厂和具体实现产品又是一种平行的层次,同时还存在一种生产关系。

     

    关注中篇。

  • 相关阅读:
    linux系统判断内存是否达到瓶颈的小技巧
    利用tcpdump命令统计http的GET和POST请求
    tcpdump 基于mac地址抓取数据包
    使用liunx系统自带的工具sar监控指定接口速率
    Windows 环境搭建Redis集群
    Windows下RabbitMQ安装,部署,配置
    鼠标事件(二)
    鼠标事件(一)
    响应式web之媒体查询(一)
    UI事件之unload、resize和scroll
  • 原文地址:https://www.cnblogs.com/iou123lg/p/3021118.html
Copyright © 2020-2023  润新知