zoukankan      html  css  js  c++  java
  • 设计模式

    设计原则:(重要)
    1.
    逻辑代码独立到单独的方法中,注重封装性--易读,易复用。
    不要在一个方法中,写下上百行的逻辑代码。把各小逻辑代码独立出来,写于其它方法中,易读其可重复调用。
    2.
    写类,写方法,写功能时,应考虑其移植性,复用性:防止一次性代码!
    是否可以拿到其它同类事物中应该?是否可以拿到其它系统中应该?
    3.
    熟练运用继承的思想:
    找出应用中相同之处,且不容易发生变化的东西,把它们抽取到抽象类中,让子类去继承它们;
    继承的思想,也方便将自己的逻辑建立于别人的成果之上。如ImageField extends JTextField;
    熟练运用接口的思想:
    找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。

    运用继承的特性,将其中共同的部分提升出来,避免重复编程。
    即:设计一个鸭子的超类(Superclass),并让各种鸭子继承这个超类。
    public class Duck{
         public void quack(){  //呱呱叫
                  System.out.println("呱呱叫");
          }
         public void swim(){   //游泳
                System.out.println(" 游泳");
          }    
         public  abstratact void display(); /*因为外观不一样,让子类自己去决定了。*/
    }
    对于它的子类只需简单的继承就可以了,并实现自己的display()方法。
    //野鸭
     public class MallardDuck extends Duck{
         public void display(){
              System.out.println("野鸭的颜色...");
       }
     }
    //红头鸭
     public class RedheadDuck extends Duck{
         public void display(){
              System.out.println("红头鸭的颜色...");
       }
    }
    不幸的是,现在客户又提出了新的需求,想让鸭子飞起来。这个对于我们OO程序员,在简单不过了,在超类中在加一
    个方法就可以了。
    public class Duck{
         public void quack(){  //呱呱叫
                  System.out.println("呱呱叫");
          }
         public void swim(){   //游泳
                System.out.println(" 游泳");
        }    
        public  abstract void display(); /*因为外观不一样,让子类自己去决定了。*/
       public void fly(){
            System.out.println("飞吧!鸭子"); 
      }
    }
    对于不能飞的鸭子,在子类中只需简单的覆盖。
    //残废鸭
     public class DisabledDuck extends Duck{
         public void display(){
              System.out.println("残废鸭的颜色...");
       }
       public void fly(){
        //覆盖,变成什么事都不做。 
      }

    其它会飞的鸭子不用覆盖。
    这样所有的继承这个超类的鸭子都会fly了。但是问题又出来了,客户又提出有的鸭子会飞,有的不能飞。
    >>>>>>点评:
    对于上面的设计,你可能发现一些弊端,如果超类有新的特性,子类都必须变动,这是我们开发最不喜欢看到的,一个类变让另一个类也跟着变,这有点不符合OO设计了。这样很显然的耦合了一起。利用继承-->耦合度太高了.
  • 相关阅读:
    判断是否在可视区域
    格式化数字10000,为10,000
    把数组(含有30项分成5组)
    排序
    enzyme 学习一
    golang使用sftp连接服务器远程上传、下载文件
    golang使用ssh远程连接服务器并执行命令
    一文弄懂vlan、三层交换机、网关、DNS、子网掩码、MAC地址的含义
    golang的序列化与反序列化的几种方式
    golang命令行参数解析
  • 原文地址:https://www.cnblogs.com/miracle-0807/p/5890067.html
Copyright © 2011-2022 走看看