zoukankan      html  css  js  c++  java
  • 案例分析:设计模式与代码的结构特性

     概述
    设计模式:设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。

    设计模式的特点:设计模式可以增强我们的代码的可读性,增强我们代码的可维护性,可以充分的实现我们的代码复用的原则。
     
    我选择的是工厂模式,工厂设计模式是一种创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
     
    对于简单工厂模式,
    工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。工厂方法模式中是一个子类对应一个工厂类,而这些工厂类都实现于一个抽象接口。这相当于是把原本会因为业务代码而庞大的简单工厂类,拆分成了一个个的工厂类,这样代码就不会都耦合在同一个类里了。
     
    结构如下所示:

    下面是一个实例结构图及分析

    1)首先定义

     1)首先定义一个工厂接口

    import org.zero01.operation.Operation;
     
    public interface Factory {
     
        public Operation createOperation() ;
     
    }
    

    2)然后是具体的工厂类:

    // 加法类工厂
    public class AddFactory implements Factory{
     
        public Operation createOperation() {
            System.out.println("加法运算");
            return new Add();
        }
    }
     
    // 减法类工厂
    public class SubFactory implements Factory{
     
        public Operation createOperation() {
            System.out.println("减法运算");
            return new Sub();
        }
    }
    ........
    

    3)定义具体的运算类:

    public class Add implements Operation{
     
        // 加法计算
        public double getResult(double numberA, double numberB) {
     
            return numberA + numberB;
        }
    }
     
     
    public class Sub implements Operation{
     
        // 减法计算
        public double getResult(double numberA, double numberB) {
            return numberA-numberB;
        }
    }
     
     
    public class Mul implements Operation{
     
        // 乘法计算
        public double getResult(double numberA, double numberB) {
            return numberA * numberB;
        }
    }
     
     
    public class Div implements Operation {
     
        // 除法计算
        public double getResult(double numberA, double numberB) throws Exception {
            if (numberB == 0) {
                throw new Exception("除数不能为0!");
            }
            return numberA / numberB;
        }
    }
    

    4)客户端代码:

    public class Client {
     
        public static void main(String[] args) throws Exception {
     
            // 使用反射机制实例化工厂对象,因为字符串是可以通过变量改变的
            Factory addFactory = (Factory) Class.forName("org.zero01.factory.AddFactory").newInstance();
            Factory subFactory=(Factory) Class.forName("org.zero01.factory.SubFactory").newInstance();
     
            // 通过工厂对象创建相应的实例对象
            Operation add = addFactory.createOperation();
            Operation sub = subFactory.createOperation();
     
            System.out.println(add.getResult(1, 1));
            System.out.println(sub.getResult(1, 1));
        }
    }
    

    5)结果

    2.0
    0.0
    

      

    工厂模式中,要增加产品类时也要相应地增加工厂类,客户端的代码也增加了不少。你想要加功能,本来是改工厂类的,而现在是修改客户端。而且各个不同功能的实例对象的创建代码,也没有耦合在同一个工厂类里,这也是工厂方法模式对简单工厂模式解耦的一个体现。工厂方法模式克服了简单工厂会违背开-闭原则的缺点,又保持了封装对象创建过程的优点。
  • 相关阅读:
    MRC和ARC混合开发
    创建静态库.a
    IOS 数据存储之 FMDB 详解
    AFNETWorking的使用
    日历demo
    iOS开发系列--通知与消息机制
    paypal支付说明
    支付宝路径的问题
    iOS开发多线程篇—GCD介绍
    回调的具体最弱智的解释
  • 原文地址:https://www.cnblogs.com/pghzl-123/p/12005811.html
Copyright © 2011-2022 走看看