设计模式

来源:互联网 发布:期刊论文仿真数据造假 编辑:程序博客网 时间:2024/05/29 10:51
设计模式:
为什么要设计?
1.      软件的复用
2.      软件的维护
 
开闭原则:
对高层的修改关闭,对低层的扩展开放
模板方法:它实现了开闭原则
package MY.module01.sjms.kbyz;
 
public class TestCET6 {
 
      
       public static void main(String[] args) {
              // TODO Auto-generated method stub
              CET6 c=new ConcretCET6();
              c.passCET6();
       }
 
}
package MY.module01.sjms.kbyz;
 
public abstract class CET6 {
       //高层业务逻辑
       public final void passCET6(){
              listen();
              say();
       }
       //提供给低层实现的业务
       abstract protected void listen();
       abstract protected void say();
}
package MY.module01.sjms.kbyz;
 
public class ConcretCET6 extends CET6{
 
       @Override
       protected void listen() {
              // TODO Auto-generated method stub
              System.out.println("listen");
       }
 
       @Override
       protected void say() {
              // TODO Auto-generated method stub
              System.out.println("say");
       }
      
}
 
里氏代换原则:
任何父类适用的地方,子类一定适用,子类可以当父类用
策略模式:实现了里氏代换原则,解决了可选算法的问题
什么是策略模式?针对共同的问题,提供解决方案或指导原则或好坏结果
package MY.module01.sjms.celuemoshi;
 
public class Client {
 
      
       public static void main(String[] args) {
              // TODO Auto-generated method stub
              Context c=new Context();//算法选择器
//          c.setD(new dis2());
              c.setD(new dis1());//选择折扣
              c.getprice(100);//打折
       }
 
}
package MY.module01.sjms.celuemoshi;
 
public class Context {
       private DisCount d;
 
       public void setD(DisCount d) {
              this.d = d;
       }
      
       public void getprice(double price){
               System.out.println(d.discout(price));
       }
}
package MY.module01.sjms.celuemoshi;
 
public class dis1 extends DisCount{
 
       @Override
       public double discout(double price) {
              // TODO Auto-generated method stub
              return price*0.8;
       }
 
}
package MY.module01.sjms.celuemoshi;
 
public class dis2 extends DisCount{
 
       @Override
       public double discout(double price) {
              // TODO Auto-generated method stub
              return price;
       }
 
}
package MY.module01.sjms.celuemoshi;
 
public abstract class DisCount {
       public abstract double discout(double price);
}
0 0
原创粉丝点击