zoukankan      html  css  js  c++  java
  • 设计模式开篇 简单工厂模式

      最近在整理、学习设计模式相关的知识,大部分是些学习笔记或者网络上整理过来的资料,以利于复习、理解之用。

      简单工厂设计模式:

    1、接口相关知识复习:

    1 一种特殊的抽象类,方法都是抽象的,属性都是常量
    2 接口的思想:封装隔离-- 对被隔离体的行为的封装或者对被隔离体的职责的封装
    3 使用接口的好处:隔离开外部调用和内部是实现 -- 接口是系统可插拔性的保证
    4 接口和抽象类的选择:
    5     优先选用接口
    6     如果要定义子类的行为又要为子类提供公共功能的时候选择抽象类
    7 面向接口编程是Java编程中的一个重要的原则。

    2、在java中非常重要的三层:

    每一个部分之间的通信都是通过接口进行的,实际上在每一个模块内部也都是通过接口进行通信的。

    在Java中实际上子系统(subSystem)、模块(Module)、系统(System)、组件(Component)都是能完成一定功能的封装体。封装体提供给外部的调用方式都是通过接口进行的。

    3、经典问题:

    请看代码:

    View Code
    Api.java
    package com.xinye.designpattern.simplefactory;
    /**
     * 接口(提供通用的、抽象的、非具体的功能)
     * @author xinye
     *
     */
    public interface Api {
        public void test(String s);
    }
    
    Impl.java
    package com.xinye.designpattern.simplefactory;
    /**
     * 具体的接口实现类
     * @author 实现类
     *
     */
    public class Impl implements Api {
    
        @Override
        public void test(String s) {
            System.out.println("您输入的是:" + s);
        }
    
    }
    
    Client.java
    package com.xinye.designpattern.simplefactory;
    /**
     * 客户端类
     * @author xinye
     *
     */
    public class Client {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            Api api = new Impl();
            api.test("我正在学习设计模式");
    
        }
    
    }

    问题:客户端需要知道接口和具体的实现类。
    由此可见简单工厂模式的主要功能是:不想让客户端知道具体的实现的时候可以使用。

    4、解决办法:

    代码:

     1 Api.java
     2 package com.xinye.designpattern.simplefactory;
     3 /**
     4  * 接口(提供通用的、抽象的、非具体的功能)
     5  * @author xinye
     6  *
     7  */
     8 public interface Api {
     9     public void test(String s);
    10 }
    11 
    12 ImpA.java
    13 package com.xinye.designpattern.simplefactory;
    14 /**
    15  * 实现类A
    16  * @author xinye
    17  *
    18  */
    19 public class ImplA implements Api {
    20 
    21     @Override
    22     public void test(String s) {
    23         System.out.println("实现类A - 您输入的内容:" + s);
    24     }
    25 
    26 }
    27 
    28 
    29 ImplB.java
    30 package com.xinye.designpattern.simplefactory;
    31 /**
    32  * 实现类B
    33  * @author xinye
    34  *
    35  */
    36 public class ImplB implements Api {
    37 
    38     @Override
    39     public void test(String s) {
    40         System.out.println("实现类B - 您输入的内容:" + s);
    41     }
    42 
    43 }
    44 
    45 
    46 Factory.java
    47 package com.xinye.designpattern.simplefactory;
    48 /**
    49  * 工厂类
    50  * @author xinye
    51  *
    52  */
    53 public class Factory {
    54     public static Api createApi(int condition){
    55         Api api = null;
    56         if(condition == 1){
    57             api = new ImplA();
    58         }else{
    59             api = new ImplB();
    60         }
    61         return api;
    62     }
    63 }
    64 
    65 
    66 Client.java
    67 package com.xinye.designpattern.simplefactory;
    68 /**
    69  * 客户端类
    70  * @author xinye
    71  *
    72  */
    73 public class Client {
    74 
    75     /**
    76      * @param args
    
    77      */
    78     public static void main(String[] args) {
    79         Api api = Factory.createApi(1);
    80         api.test("工厂类中创建的对象");
    81 
    82     }
    83 
    84 }
  • 相关阅读:
    看到一个很好看的细细的字体
    meta标签常用属性整理
    网页字体排印指南
    利用伪元素仿苹果手机官网导航
    利用css3-animation来制作逐帧动画
    CSS实现垂直居中的5种方法
    前端网站
    icon font
    flexbox布局总结
    Yahoo(YUI) CSS Reset:
  • 原文地址:https://www.cnblogs.com/xinye/p/2980006.html
Copyright © 2011-2022 走看看