java常用设计模式

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

示例

 public interface FlyBehavior{
     public void fly();     
 }
 public interface QuackBehavior{
     public void quack();
 }
  public class FlyWithWings implements FlyBehavior{
    public void  fly(){
     //实现了所有有翅膀的鸭子飞行行为。
   }
 }
public class FlyNoWay implements FlyBehavior{
 
    public void  fly(){
      //什么都不做,不会飞
    }
 } 
 public class Quack implements QuackBehavior{
    public void quack(){
      //实现呱呱叫的鸭子
  }
}
 
public class Squeak implements QuackBehavior{
    public void quack(){
      //实现吱吱叫的鸭子 
  }
}
 
public class MuteQuack implements QuackBehavior{
    public void quack(){
      //什么都不做,不会叫
  }
}
public class Duck{                --------->在抽象类中,声明各接口,定义各接口对应的方法.
      FlyBehavior flyBehavior;//接口
      QuackBehavior quackBehavior;//接口
       public Duck(){}
       public abstract void display();
       public void swim(){
        //实现游泳的行为
        }
       public void performFly(){
            flyBehavior.fly();  -->由于是接口,会根据继承类实现的方式,而调用相应的方法.
     }
     public void performQuack(){
          quackBehavior.quack();();
    }
 }
 ----->通过构造方法,生成'飞','叫'具体实现类的实例,从而指定'飞','叫'的具体属性
 public class MallardDuck extends Duck{
       public MallardDuck {       
        flyBehavior = new FlyWithWings ();
        quackBehavior = new Quack(); 
      //因为MallardDuck 继承了Duck,所有具有flyBehavior 与quackBehavior 实例变量}
    public void display(){
     //实现
   }
 }

这样就满足了即可以飞,又可以叫,同时展现自己的颜色了。这样的设计我们可以看到是把flyBehavior ,quackBehavior的实例化写在子类了。我们还可以动态的来决定。 我们只需在Duck中加上两个方法。在构造方法中对属性进行赋值与用属性的setter的区别:构造方法中对属性进行赋值:固定,不可变;用属性的setter,可以在实例化对象后,动态的变化,比较灵活

public class Duck{
      FlyBehavior flyBehavior;//接口
      QuackBehavior quackBehavior;//接口
      public void setFlyBehavior(FlyBehavior flyBehavior){
            this.flyBehavior = flyBehavior;
     }
    public void setQuackBehavior(QuackBehavior quackBehavior  {
            this.quackBehavior= quackBehavior;
     }
 }
工厂模式

概念
FactoryMethod是一种创建性模式,它定义了一个创建对象的接口,但是却让子类来决定具体实例化哪一个类.通常我们将Factory Method作为一种标准的创建对象的方法

应用方面
当一个类无法预料要创建哪种类的对象或是一个类需要由子类来指定创建的对象时我们就需要用到Factory Method 模式了

单例模式

概念
Singleton 是一种创建性模型,它用来确保只产生一个实例,并提供一个访问它的全局访问点.对一些类来说,保证只有一个实例是很重要的,比如有的时候,数据库连接或 Socket 连接要受到一定的限制,必须保持同一时间只能有一个连接的存在

应用方面
在于使用static变量;创建类对象,一般是在构造方法中,或用一个方法来创建类对象。在这里方法中,加对相应的判断即可

观察者模式

概念
观察者模式属于行为型模式,其意图是定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这一个模式的关键对象是目标(Subject)和观察者(Observer)。一个目标可以有任意数目的依赖它的观察者,一旦目标的状态发生改变,所有的观察者都得到通知,作为对这个通知的响应,每个观察者都将查询目标以使其状态与目标的状态同步

应用方面
观察者模式,用于存在一对多依赖关系的对象间,当被依赖者变化时,通知依赖者全部进行更新。因此,被依赖者,应该有添加/删除依赖者的方法,且可以将添加的依赖者放到一个容器中;且有一个方法去通知依赖者进行更新
思想

建立目标(subject)与观察者(observer)接口
目标(subject)接口:
建立一个注册观察者对象的接口; public void attach(Observer o);
建立一个删除观察者对象的接口; public void detach(Observer o);
建立一个当目标状态发生改变时,发布通知给观察者对象的接口; public void notice();
观察者(observer)接口:
建立一个当收到目标通知后的更新接口: public void update();
适配器模式

概念
适配器模式的意图是将一个已存在的类/接口进行复用,将其转换/具体化成客户希望的另外的一个类/接口

应用方面
将要进行复用的类,放到目标类的构造方法中,进行实例化,然后在目标类的相应方法中,进行调用,修改原来方法中的参数,或添加相应的逻辑。即复用了已有类的原来方法

代理模式

概念
是可以在间接访问对象的同时,要其前或后,添加其它的逻辑代码.对原来逻辑进行添加其它逻辑,最终生成新的逻辑.即:对类的方法添加一些额外的逻辑,生成新的方法逻辑

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值