设计模式入门--设计模式学习笔记<一>

设计模式入门--设计模式学习笔记一

 

使用模式的最好方式:

把模式装进脑子里,然后在你的设计和已有的应用中,寻找何处可以使用他。

 

 

设计原则1:

         找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。

        这个原则的另一种思考方式:“把会变化的部分取出并 封装起来,以便以后可以轻易地改动或扩充此部分,而不影响不需要变化的其他部分”。

 

设计原则2:

         针对接口编程,而不是针对实现编程。

         “针对接口编程” 真正的意思是“针对超类型 (supertype)编程”。

 

设计原则3:

        多用组合,少用继承。

        “有一个”可能比”是一个”更好

 

第一个设计模式:Strategy Pattern(策略模式)

         定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的替换独立于使用算法的客户。

 

鸭子模拟:

原则1:将鸭子变化的和不变的分开。

               不变:都会游泳,外貌特定不变;

               变:会飞于不会飞,不同的鸭子叫声不同;

 

原则2:针对接口编程。

将变化的部分封装成接口:

1.使用interface封装

public  interface FlyBehavior {

 

            public void fly();

}

 

public interface QuackBehavior {

 

            public void quack();

}

2.使用抽象类封装

public abstract class FlyBehavior {

 

            public abstract void fly();

 

}

 

public abstract class QuackBehavior {

 

            public abstract void quack();

}

 

实现变化部分:

public class FlyNoWay extends FlyBehavior{

            @Override

            public void fly() {

                        System.out.print("Ican't fly!!");

            }

}

 

public class FlyWithWings extends FlyBehavior{ 

            @Override

            public void fly() {

                        System.out.print("Iam flying!");

            }

}

 

public class Quack extends QuackBehavior{

            @Override

            public void quack() {

                        System.out.print("Quack\n");

            }

}

 

public class Squeak extends QuackBehavior{

            @Override

            public void quack() {

                        System.out.print("Squeak");

            }

}

原则3:多用组合,少用继承

利用接口将鸭子的变化与不变组合成superclass  Duck

public abstract class Duck {

                       

            FlyBehavior mFlyBehavior;

            QuackBehavior mQuackBehavior;

           

            public Duck(){

                                   

            }

           

            public abstract void display();

                       

            public void performFly(){

                        mFlyBehavior.fly();

            }

                       

            public void performQuack(){

                        mQuackBehavior.quack();

            }

           

            public void swim(){

                        System.out.print("Allducks float!!!");

            }

 

}

 

创建subclass MallardDuck,继承自superclass Duck,这里,我们正在制造一个具体的Quack实现类的实例和一个FlyWithWings实现类的实例!违背了设计原则2,不针对实现编程。会在学习了其它模式后修改。

 

public class MallardDuck extends Duck {

            public MallardDuck(){

                        mFlyBehavior = newFlyWithWings();

                        mQuackBehavior = newQuack();

            }

            @Override

            public void display() {

                        System.out.print("I’ma real Mallard duck");

            }

 

}

 

编译测试:

public class Simulator {

            public static void       main(String[] args)

            {

                        Duck mallard = newMallardDuck();

                        mallard.performQuack();

                        mallard.performFly();

            }  

}

输出:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值