会点模式,要有大局观~~~

总的原则是像变形金刚一样,各个组件拆到刚好适合业务为止。。

拆得太细,会迷失。

耦合性太强的话,会不能适应变化~~

MiniDuckSimulator.java

abstract class Duck {

    FlyBehavior flyBehavior;
    QuackBehavior quackBehavior;

    public abstract void display();

    public void performFly() {
        flyBehavior.fly();
    }

    public void performQuack() {
        quackBehavior.quack();
    }
    public void swim() {
        System.out.println("All duck float, even decoys!");
    }

    public void setFlyBehavior(FlyBehavior fb) {
        flyBehavior = fb;
    }
    public void setQuackBehavior(QuackBehavior qb) {
        quackBehavior = qb;
    }
}

interface FlyBehavior{
    public void fly();
}

class FlyWithWings implements FlyBehavior {
    public void fly() {
        System.out.println("I‘m flying!");
    }
}

class FlyNoWay implements FlyBehavior {
    public void fly() {
        System.out.println("I can‘t fly!");
    }
}

class FlyRocketPowered implements FlyBehavior {
    public void fly() {
        System.out.println("I‘m flying with a rocket!");
    }
}

interface QuackBehavior {
    public void quack();
}

class Quack implements QuackBehavior {
    public void quack() {
        System.out.println("Quack");
    }
}

class MuteQuack implements QuackBehavior {
    public void quack() {
        System.out.println("<< Silence >>");
    }
}

class Squeak implements QuackBehavior {
    public void quack(){
        System.out.println("Squeak");
    }
}

class MallardDuck extends Duck {
    public MallardDuck() {
        quackBehavior = new Quack();
        flyBehavior = new FlyWithWings();
    }
    public void display(){
        System.out.println("I‘m a real Mallard duck");
    }
}

class ModelDuck extends Duck {
    public ModelDuck() {
        flyBehavior = new FlyNoWay();
        quackBehavior = new Quack();
    }
    public void display() {
        System.out.println("I‘m a model duck!");
    }
}

public class MiniDuckSimulator {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Duck mallard = new MallardDuck();
        mallard.performQuack();
        mallard.performFly();
        mallard.swim();

        Duck model = new ModelDuck();
        model.performFly();
        model.setFlyBehavior(new FlyRocketPowered());
        model.performFly();

    }

}

Quack
I‘m flying!
All duck float, even decoys!
I can‘t fly!
I‘m flying with a rocket!

时间: 2024-10-12 16:13:04

会点模式,要有大局观~~~的相关文章

【设计模式】策略模式 —— 封装行为的大局观

OO基础 抽象 封装 多态 继承 OO原则 封装变化 多用组合,少用继承 针对接口编程,不针对实现编程 OO模式 策略模式——定义算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户. 1. 知道OO基础,并不足以让你设计出良好的OO系统. 2. 良好的OO设计必须具有可复用.可扩充.可维护三个特性. 3. 模式可以让我们建造出具有良好OO设计质量的系统. 4. 模式被认为是历经验证的OO设计经验. 5. 模式不是代码,而是针对设计问题的通用解决方案.你可以把它们

.NET领域驱动设计—初尝(疑问、模式、原则、工具、过程、框架、实践)

阅读目录: 1.1.疑问 1.1.1.UML何用 1.1.2.领域建模 1.2.模式 1.3.原则 1.5.过程 1.6.框架 1.7.项目演示 最近在研究DDD颇有收获,所以整理出来跟大家分享,共同进步! 我们在设计业务系统的时候都会存在一个非常棘手而又无法回避的问题"业务扩展性"."业务灵活性."面向对象化",尽管我们熟练掌握设计思想.设计模式.设计原则等等关于如何设计灵活性的系统设计理论,但是我们似乎都没有将它们运用到真正业务系统设计.开发当中去,为

《卖体验》:给用户超出预期的体验。营销讲师风格,陷入了锤子模式。三星推荐

作者主要的观点就是要给顾客更多更好的服务,让顾客惊喜. 原书出版于2003年.作者大学毕业后加入家族的服装店,后来成了营销讲师. 全书有浓厚的营销讲师风格.不断地讲内容相似的小故事或者案例,从来没有大局观,从来不说全局的情况.说来说去都是让顾客感动.让顾客惊喜的小故事. 我认为作者陷入了锤子模式:手拿一把锤子,看世界都是钉子. 作者的米切尔服装店业务是高端定制服装,不是常见的商业模式.另外我有点怀疑作者经营服装店的业绩.这么多年过去了,作者的米切尔服装店在国内闻所未闻,搜英文也搜不到一个像样的网

元素模式

元素模式(最新Jolt大奖得主彻底颠覆传统GoF设计模式的里程碑著作) [美]Jason McC. Smith(杰森.史密斯) 著 高博 凌杰 徐平平译 ISBN 978-7-121-23468-2 2014年6月出版 定价:69.00元 364页 16开 编辑推荐 本书介绍一类全新的设计模式--元素模式(Elemental Design Pattern).元素模式植根于软件程序设计理论,目的却在于实践性和实用性.程序设计新手与资深开发工程师都是元素模式的目标受众.它能带领学生加入软件工业大军,

.NET领域驱动设计—初尝(一:疑问、模式、原则、工具、过程、框架、实践)

.NET领域驱动设计—初尝(一:疑问.模式.原则.工具.过程.框架.实践) 2013-04-07 17:35:27 标签:.NET DDD 驱动设计 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://wangqingpei557.blog.51cto.com/1009349/1173006 1.1.疑问 1.1.1.UML何用 1.1.2.领域建模 1.2.模式 1.3.原则 1.4.工具 1.5.过程 1.6.框架 1.7.项

【Windows10&nbsp;IoT开发系列】开发人员模式设置

原文:[Windows10 IoT开发系列]开发人员模式设置  声明:本文转自微软Windows 开发人员中心(https://msdn.microsoft.com/library/windows/apps/xaml/dn706236.aspx),在此基础上进行删减和修改. ​对于要用于开发.安装或测试应用的设备,不再需要开发人员许可证.你只需从设备的设置中为这些任务启用设备一次.(仅限于运行Windows 10系统的设备) 使用开发人员功能 ​使用 Microsoft Visual Stud

浅析selenium的PageFactory模式

前面的文章介绍了selenium的PO模式,见文章:http://www.cnblogs.com/qiaoyeye/p/5220827.html.下面介绍一下PageFactory模式. 1.首先介绍FindBy类: For example, these two annotations point to the same element: @FindBy(id = "foobar") WebElement foobar; @FindBy(how = How.ID, using = &q

Java设计模式学习笔记,三:建造者模式

建造者模式:实现了构建和装配的解耦,即对象的各个子组件单独构建,再进行装配,从而建造完整对象. 该模式适用于构建较为复杂的对象(多个子组件). 不同的构建者,使用相同的装配者,可以建造不同的对象实例.相同的构建者,不同的装配顺序,也可能建造出不同的对象实例. 举例: 汽车对象,子组件包括引擎.轮子和车体. Audi汽车构建者,负责制造Audi牌各个子组件.BMW汽车构建者,负责制造BMW牌各个子组件.然后将子组件统一送至汽车装配者的生产线中进行组装,最后会建造出Audi牌汽车和BMW汽车. 以下

微领地小蜜app模式系统开发详解

如今企业竞争的最高境界, 不再是产品的竞争.人才的竞争.营销的竞争-- 而是一种商业模式(即赢利模式)的竞争. 微领地小蜜软件,微领地小蜜系统,小蜜APP,微领地小蜜平台,微领地小蜜开发公司,微领地小蜜服务模式,微领地小蜜商圈.O2O.C2B.B2C.F2C.B2B.C2N.C2C等微商城.App.手机网页.PC商城.小程序,微商管理系统.一物一码.防伪防窜.扫码红包.质量追溯.分销.全返.分红.拼团.互联网+直播+定制服务·系统开发提供中心. 回首过去,创新与发展裹带着机遇和挑战,微领地小蜜在