• 《Head First 设计模式》学习笔记——策略模型


    我们全都使用别人设计好的库与框架。我们讨论库与框架、利用他们的API编译成我们的程序、享受运用别人的代码所带来的长处。看看java api它所带来的功能:网络、GUI、IO等。库与框架长久以来,一直扮演着软件开发过程的重要角色,我们从中挑选所要的组件,把他们放进合适的地方。可是,库与框架无法帮助我们将应用组织成easy了解、easy维护、具有弹性的架构,所以要设计模式。
    设计模式不会直接进入你的代码中,而是先进入你的“大脑”中。一旦你先在脑海中装入了很多关于模式的知识,就行開始新设计中採用它们,并当你的旧代码变得如同搅和成一团没有弹性的意大利面一样时,可以用它们重做旧代码。————题记

    面向对象的设计原则
    (1)找出应用中可能须要变化之处,把它们独立出来,不要和那些变化的代码混在一起。————封装变化
    也即把变化的部分取出来并封装起来,以便以后能够轻而易举地修改或者扩充此部分,而不影响不须要变化的其它部分。
    (2)针对接口编程,而非针对实现编程————
    “针对接口编程”,关键在于多态。利用多态,程序能够针对超类型编程,运行时会依据实际状况运行到真正的行为,不会被绑死在超类型的行为上。“针对超类型编程”这句话能够更明白的说成是变量的声明类应该是超类型,一般是一个抽象类或者一个接口,如此,仅仅要是详细实现此超类型的类所产生的对象,都能够指定给这个变量。也就意味着,声明类时不用理会以后运行时的真正对象类型。
    (3)多用组合,少用继承。
    通过组合建立系统具有非常大的弹性,不仅可将算法族封装成类,还能够“在执行时动态改变行为”,仅仅要组合的行为对象符合正确的接口标准就可以。
    继承的缺点:
    1、代码在多个子类中反复,由于全部子类须要覆盖父类的抽象方法;
    2、子类执行时不easy改变状态,由于没有setter方法;
    3、非常难知道所有子类的所有行为;
    4、改变牵一发而动全身,造成其它子类不想要的改变。

    要点
    知道OO基础,并不足以让你设计出良好的OO系统。
    良好的OO设计必须具备可复用、可扩充、可维护三个特性。
    模式不是代码,而是针对设计问题的通用解决方式。

    设计模式
    (1)策略模型:定义了算法族,分别封装起来,让他们之间能够互相替换,此模式让算法的变化独立于使用算法的客户。

    复习一下抽象的几个概念:
    1、抽象方法abstract,父类的抽象方法主要作用为占位,由子类来实现;
    2、为了提高清晰度,包括一个或多个抽象方法的类本身必须声明为抽象类;
    3、类即使不包括抽象方法,也能够声明为抽象类;
    4、抽象类不能被实例化。

    public abstract class duck {
    
        FlyBehavior flybehavior;
        QuackBehavior quackbehavior;
        public duck(){
        }
    
    	//抽象类
        public void abstract display();
        
        public void performFly() {
            flybehavior.fly();
        }
    
        public void performQuack() {
            quackbehavior.quack();
        }
    
        public void swim() {
            System.out.println("All ducks float, even decoys.");
        }
    	
    	//设定动态行为
    	public void setFlyBehavior(FlyBehavior fb) {
    		flybehavior = fb;
    	}
    
    	public void setQuackBehavior(QuackBehavior qb) {
    		quackbehavior = qb;
    	}
    }
    
    public interface Flybehavior {
    	public void fly();
    }
    
    public interface Quackbehavior {
    	public void quack();
    }



  • 相关阅读:
    springboot2.04+mybatis-plus+swagger2+CodeGenerator
    1.Jenkins 在windows下的安装与配置
    .Net Core Linux centos7行—vscode开发,linux部署运行
    .Net Core Linux centos7行—安装nginx,运行静态网站
    .Net Core Linux centos7行—hyper-v安装linux系统和.net core sdk
    扩展htmlhelper.DropDownListFor 支持list数据源和option增加属性
    SignalR主动通知订阅者示例
    asp.net mvc HandleErrorAttribute 异常错误处理 无效!
    Microsoft.AspNet.Identity 自定义使用现有的表—登录实现
    asp.net mvc输出自定义404等错误页面,非302跳转。
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/3784610.html
Copyright © 2020-2023  润新知