代理模式,简单(静态)工厂模式,单例模式,模板方法模式个人理解

简言:

java中总共有23种设计模式,每个模式的出现都是为了解决某一方面的问题,所以这23种设计模式有他们各自适用的地方(废话有点多),而设计模式的产生主要是为了降低类与类之间的耦合度。下面我们就简单的了解一下几种设计模式及使用的地方。

1.单例模式:

我们都知道单例模式分为懒汉式、饿汉式以及登记式三种。
代码如下(以懒汉式):
public class 单例模式 {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
        a a1=a.getinstence();
        a1.gg();
}

}
class a{

private static a a;
private a(){    
}
public static a getinstence(){
    if(a==null){
        a=new a();
        System.out.println("haha");
    }
    return a;

}
public void gg(){
    System.out.println("hahsdsda");
}

}
特点:
如上代码所式可知:a类的构造方法为私有的(是不是有点奇怪啊,平时我们的构造方法为public的),这就是单例模式的特点,即只能存在一个对象。
单例对象是通过自己来创建对象的。
单例类必须给所有其他对象提供这一实例。
在什么地方可以考虑使用:
1.当一个类没有属性。
2.该类作为工具类使用非常频繁。

2.工厂模式:

工厂模式分为三种:简单工厂模式、工厂方法模式、抽象工厂模式。而本文主要针对简单工厂模式。
简单工厂模式代码如下:

package 模式;

public class 工厂模式 {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub


    work w=factor.getwork("tv");

    w.working();

}}

class factor {
public static work getwork(String name){
if(name.equals(“tv”)){return new tv();}
else if(name.equals(“phone”)){return new phone();}
else{
return null;}
}

}

interface work{
void working();
}

class tv implements work{

@Override
public void working() {
    // TODO Auto-generated method stub
    System.out.println("tvok");
}

}
class phone implements work{

@Override
public void working() {
    // TODO Auto-generated method stub
    System.out.println("shoujiok");
}

}

该模式的目的是为了加强代码的健壮性。减少类与类之间的耦合度。
使用的场景:
1动态实现:好多需要实现同一个接口的对象,
2.如上面的代码所示一样,如果我不使用工厂模式的话,就必须想使用某个类中的方法就必须new一个方法,假如某天这个类消失了,或则改名字了,那么new对象的方法也就没用了,还会报错,所以就使用该模式,该模式通过传递某些值来new一个对象,如果该类不存在,或者是其他原因也不会导致错误的发生,总的来说就是降低了类与类之间的耦合度。

3.代理模式:

简单的比喻就是一个人代表另一个人采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之前起到中介的作用。
代码如下:
public class 代理模式 {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    buy b=new people();
    daili d=new daili(b);
    d.shopp();
}

}
//个人购买
class people implements buy{
@Override
public void shopp() {
// TODO Auto-generated method stub
System.out.println(“buysomething”);
}
}
interface buy{
void shopp();
}
//代理
class daili implements buy{
private buy b;
public daili( buy b){
this.b=b;
}
@Override
public void shopp() {
// TODO Auto-generated method stub
b.shopp();
System.out.println(“thank”);
}
}

4.模板方法模式:

模板方法模式是所有模式中最为常见的几个模式之一,他是基于继承的代码复用的基本技术。
代码:public class 模板方法设计模式 {

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    aa a1=new c();
    a1.finall();
}

}
abstract class aa{
abstract boolean say();
void finall(){
if(say()){
System.out.println(“gg”);
}
else{
System.out.println(“hh”);
}
}
}
class b extends aa{

@Override
boolean say() {
    // TODO Auto-generated method stub
    return true;
}

}
class c extends aa{
@Override
boolean say() {
// TODO Auto-generated method stub
return false;
}
}
主要是用了多态和抽象类的方法实现,主要是为了一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值