简言:
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;
}
}
主要是用了多态和抽象类的方法实现,主要是为了一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。