??xml version="1.0" encoding="utf-8" standalone="yes"?>久久成人羞羞网站,亚洲午夜久久久久久久,精品精品国产三级a∨在线http://www.aygfsteel.com/zmy327/一步一个脚?/description>zh-cnWed, 18 Jun 2025 22:15:30 GMTWed, 18 Jun 2025 22:15:30 GMT60设计模式之代理模?1http://www.aygfsteel.com/zmy327/archive/2012/06/28/381738.html兔小?/dc:creator>兔小?/author>Thu, 28 Jun 2012 14:16:00 GMThttp://www.aygfsteel.com/zmy327/archive/2012/06/28/381738.htmlhttp://www.aygfsteel.com/zmy327/comments/381738.htmlhttp://www.aygfsteel.com/zmy327/archive/2012/06/28/381738.html#Feedback0http://www.aygfsteel.com/zmy327/comments/commentRss/381738.htmlhttp://www.aygfsteel.com/zmy327/services/trackbacks/381738.html设计模式之代理模?1
问题Q如何知道一个方法的q行旉Q?br />引出代理
----------------------
1.直接在原来类上修?br />利用System.currentTimeMillis()
public void Move() {
        
long start=System.currentTimeMillis();
        System.out.println(
"Tank Moving");
        
try {
            Thread.sleep(
new Random().nextInt(10000));
        } 
catch (InterruptedException e) {            
            e.printStackTrace();
        }
        
long end=System.currentTimeMillis();
        System.out.println(
"time:"+(end-start));
        
    }


2.利用l承
如果不能在原来类上添加函数。则可以利用新徏cȝ承extends原来c,重写ҎQ在super.Ҏ前后加入此函数System.currentTimeMillis()
public class Tank2 extends Tank{
    @Override
    
public void Move() {
        
long start=System.currentTimeMillis();
        
super.Move();
        
long end=System.currentTimeMillis();
        System.out.println(
"time2:"+(end-start));
    }
    
}

3.利用聚合。新Z个类B实现接口函数QBc里面有需要测试的cA的对象。相当于B是A的一个代理。实际上Q第二种Ҏ也算是一个代?br />public class Tank3 implements Moveable{        
    
public Tank3(Tank myt) {
        
super();
        
this.myt=myt;        
    }
    Tank myt;    
    
    @Override
    
public void Move() {
        
long start=System.currentTimeMillis();
        myt.Move();
        
long end=System.currentTimeMillis();
        System.out.println(
"time3:"+(end-start));
    }    
}

4、利用聚合实现多个代理。下面写旉代理Q运行的旉Q和日志代理Q打华ͼ,可以通过改变clientcM代理调用序来改变出现的序
------------- Moveable .java-------------
package mypro.cn;
public interface Moveable {
    
public void Move();
}

---------------tank.java-----------
package mypro.cn;
import java.util.Random;
public class Tank implements Moveable{

    
public void Move() {
        System.out.println(
"Tank Moving");
        
try {
            Thread.sleep(
new Random().nextInt(10000));
        } 
catch (InterruptedException e) {            
            e.printStackTrace();
        }
        
    }
}
----------- TankTimeProxy.java-------------------------
package mypro.cn;
import java.text.DateFormat;

public class TankTimeProxy implements Moveable{        
    
public TankTimeProxy(Moveable myt) {
        
super();
        
this.myt=myt;        
    }
    Moveable myt;    
    
    @Override
    
public void Move() {
        
long start=System.currentTimeMillis();
        java.util.Date date 
= new java.util.Date();
        String currTime 
= DateFormat.getDateTimeInstance().format(date);
        System.out.println(
"starttime:"+currTime);
        myt.Move();
        
long end=System.currentTimeMillis();
        System.out.println(
"time:"+(end-start));
    }    
}

------------------------- TankLogProxy .java-------------------------------
package mypro.cn;

public class TankLogProxy implements Moveable{        
    
public TankLogProxy(Moveable myt) {
        
super();
        
this.myt=myt;        
    }
    Moveable myt;    
    
    @Override
    
public void Move() {//日志代理
        System.out.println("tank start");
        myt.Move();        
        System.out.println(
"tank stop");    }    
}

--------------------- Client .java----------------------------
package mypro.cn;
public class Client {
    
public static void main(String[] args) {
        Tank t
=new Tank();
        TankTimeProxy ttp
=new TankTimeProxy(t);//先时间代理,卛_包装一层时?/span>
        TankLogProxy tlp=new TankLogProxy(ttp);//再日志代理,最外层包装日志
        Moveable m=tlp;
        m.Move();
    }
}
 
改变包装序Q先包装日志Q再包装旉Q?br /> 
    




]]>
设计模式之工厂模式:http://www.aygfsteel.com/zmy327/archive/2012/06/28/381726.html兔小?/dc:creator>兔小?/author>Thu, 28 Jun 2012 08:47:00 GMThttp://www.aygfsteel.com/zmy327/archive/2012/06/28/381726.htmlhttp://www.aygfsteel.com/zmy327/comments/381726.htmlhttp://www.aygfsteel.com/zmy327/archive/2012/06/28/381726.html#Feedback0http://www.aygfsteel.com/zmy327/comments/commentRss/381726.htmlhttp://www.aygfsteel.com/zmy327/services/trackbacks/381726.html 

设计模式之工厂模式:
1?nbsp;   掌握什么叫反射
2?nbsp;   掌握classcȝ作用
3?nbsp;   通过反射实例化对?br />4?nbsp;   通过反射调用cMҎ的操作原?br />5?nbsp;   工厂设计的改q,重点掌握其思想Q程序和配置相分?br />package fac.cn;
interface Fruit{
    
public void eat();
}
class Apple implements Fruit{
    
public void eat(){
        System.out.println(
"吃苹?/span>");
    }
}
class Orange implements Fruit{
    
public void eat(){
        System.out.println(
"吃橘?/span>");
    }
}

class Factory{
    
public static Fruit getInstance(String className){
        Fruit f
=null;
        
if(className.equals("Apple"))
            f
=new Apple();
        
else if(className.equals("Orange"))
            f
=new Orange();
        
return f;
    }
}
public class FactoryDemo {
    
public static void main(String args[]){
        Fruit fruit
=Factory.getInstance("Apple");
        fruit.eat();
    }

}
注:本程序的实C工厂操作。所有的问题集中在工厂操作中Q因为每ơ只要一增加子类Q则必须修改工厂。此时可以根据反机制来完成Q通过ClasscL修改工厂
如下表即Z改的工厂cdȝ
class Factory{
    
public static Fruit getInstance(String className){
        Fruit f
=null;
            
try {
                f
=(Fruit)Class.forName(className).newInstance();
            } 
            
catch (Exception e) {                
                e.printStackTrace();
            }
        
return f;
    }
}
public class FactoryDemo2 {
    
public static void main(String args[]){
        Fruit fruit
=Factory.getInstance("fac2.cn.Apple");
        fruit.eat();
    }

}
注:在以上操作中Q工厂类完全不用修改Q但是每ơ操作应用时Q都必须输入很长的包.c?名称Q用时很不方便。最好的Ҏ是通过一个别名来表示q个完成的包.cdUͼ而且在类增加的时候,别名也可以自动增加。所以如果想要完成这L操作Q可以用属性类配置

class MyPropertiesOperate{//属性操作类
    private Properties pro=null;
    
private File file=new File("D:\\Workplace"+File.separator+"Fruit.properties");
    
public MyPropertiesOperate(){
        
this.pro=new Properties();
        
if(file.exists()){//文g存在
            try {
                pro.loadFromXML(
new FileInputStream(file)); //d
            } 
            
catch (Exception e) {                
            }
        }
        
else this.save();
    }
    
    
private void save(){
        
this.pro.setProperty("Apple""cn3.Apple");
        
this.pro.setProperty("Orange""cn3.Orange");
        
try {
            
this.pro.storeToXML(new FileOutputStream(this.file),"Fruit"); //d
        } 
        
catch (Exception e) {                
        }
    }
    
public Properties getProperties(){
        
return this.pro;
    }
    
}
public class FactoryDemo3 {
    
public static void main(String args[]){
        Properties myPro
=new MyPropertiesOperate().getProperties();    
        Fruit fruit
=Factory.getInstance(myPro.getProperty("Orange"));
        fruit.eat();
    }

}
注:从以上的操作代码中发玎ͼE序通过一个配|文Ӟ可以控制E序的执行,也就是达C配置文g和程序相分离的目的。这个设计思想现在q在使用中,包括三大框架{。最新的设计理论Q是注释写入代码之中,让注释v到程序控制的作用。要实现此操作,则用Annotation完成

 



]]>
ClassҎ摘要http://www.aygfsteel.com/zmy327/archive/2012/06/23/381355.html兔小?/dc:creator>兔小?/author>Sat, 23 Jun 2012 09:07:00 GMThttp://www.aygfsteel.com/zmy327/archive/2012/06/23/381355.htmlhttp://www.aygfsteel.com/zmy327/comments/381355.htmlhttp://www.aygfsteel.com/zmy327/archive/2012/06/23/381355.html#Feedback0http://www.aygfsteel.com/zmy327/comments/commentRss/381355.htmlhttp://www.aygfsteel.com/zmy327/services/trackbacks/381355.html


Ҏ摘要





<U> Class<? extends
U>

asSubclass(Class<U> clazz)
          强制转换?
Class
对象Q以表示指定?class
对象所表示的类的一个子cR?/td>

T
cast(Object obj)

          一个对象强制{换成?Class 对象所表示的类或接口?/td>

boolean
desiredAssertionStatus()

          如果要在调用此方法时要初始化该c,则返回将分配l该cȝ断言状态?/td>

static Class<?>
forName(String className)

          q回与带有给定字W串名的cL接口相关联的 Class 对象?/td>

static Class<?>
forName(String name,
boolean initialize, ClassLoader loader)


          使用l定的类加蝲器,q回与带有给定字W串名的cL接口相关联的 Class
对象?/td>





<A extends Annotation>

A

getAnnotation(Class<A> annotationClass)

如果存在该元素的指定cd的注释,则返回这些注释,否则q回 null?/td>

Annotation[]
getAnnotations()

          q回此元素上存在的所有注释?/td>

String
getCanonicalName()

          q回 Java Language Specification 中所定义的底层类的规范化名称?/td>

Class<?>[]
getClasses()

          q回一个包含某?Class 对象的数l,q些对象表示属于?Class
对象所表示的类的成员的所有公q和接口?/td>

ClassLoader
getClassLoader()

          q回该类的类加蝲器?/td>

Class<?>
getComponentType()

          q回表示数组lgcd?Class?/td>

Constructor<T>
getConstructor(Class<?>... parameterTypes)

          q回一?Constructor 对象Q它反映?Class
对象所表示的类的指定公共构造方法?/td>

Constructor<?>[]
getConstructors()

          q回一个包含某?Constructor 对象的数l,q些对象反映?Class
对象所表示的类的所有公共构造方法?/td>

Annotation[]
getDeclaredAnnotations()

          q回直接存在于此元素上的所有注释?/td>

Class<?>[]
getDeclaredClasses()

          q回 Class 对象的一个数l,q些对象反映声明为此 Class
对象所表示的类的成员的所有类和接口?/td>

Constructor<T>
getDeclaredConstructor(Class<?>... parameterTypes)

          q回一?Constructor 对象Q该对象反映?Class
对象所表示的类或接口的指定构造方法?/td>

Constructor<?>[]
getDeclaredConstructors()

          q回 Constructor 对象的一个数l,q些对象反映?Class
对象表示的类声明的所有构造方法?/td>

Field
getDeclaredField(String name)

          q回一?Field 对象Q该对象反映?Class
对象所表示的类或接口的指定已声明字Dc?/td>

Field[]
getDeclaredFields()

          q回 Field 对象的一个数l,q些对象反映?Class
对象所表示的类或接口所声明的所有字Dc?/td>

Method
getDeclaredMethod(String name, Class<?>... parameterTypes)

          q回一?Method 对象Q该对象反映?Class
对象所表示的类或接口的指定已声明方法?/td>

Method[]
getDeclaredMethods()

          q回 Method 对象的一个数l,q些对象反映?Class
对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)讉K和私有方法,但不包括l承的方法?/td>

Class<?>
getDeclaringClass()

          如果?Class 对象所表示的类或接口是另一个类的成员,则返回的 Class
对象表示该对象的声明cR?/td>

Class<?>
getEnclosingClass()

          q回底层cȝ立即闭cR?/td>

Constructor<?>
getEnclosingConstructor()

          如果?Class 对象表示构造方法中的一个本地或匿名c,则返?Constructor
对象Q它表示底层cȝ立即闭构造方法?/td>

Method
getEnclosingMethod()

          如果?Class 对象表示某一Ҏ中的一个本地或匿名c,则返?Method
对象Q它表示底层cȝ立即闭Ҏ?/td>

T[]
getEnumConstants()

          如果?Class 对象不表C枚丄型,则返回枚丄的元素或 null?/td>

Field
getField(String name)

          q回一?Field 对象Q它反映?Class
对象所表示的类或接口的指定公共成员字段?/td>

Field[]
getFields()

          q回一个包含某?Field 对象的数l,q些对象反映?Class
对象所表示的类或接口的所有可讉K公共字段?/td>

Type[]
getGenericInterfaces()

          q回表示某些接口?TypeQ这些接口由此对象所表示的类或接口直接实现?/td>

Type
getGenericSuperclass()

          q回表示?Class 所表示的实体(cR接口、基本类型或 voidQ的直接类?
Type?/td>

Class<?>[]
getInterfaces()

          定此对象所表示的类或接口实现的接口?/td>

Method
getMethod(String name, Class<?>... parameterTypes)

          q回一?Method 对象Q它反映?Class
对象所表示的类或接口的指定公共成员Ҏ?/td>

Method[]
getMethods()

          q回一个包含某?Method 对象的数l,q些对象反映?Class
对象所表示的类或接口(包括那些pcL接口声明的以及从类和超接口l承的那些的cL接口Q的公共 member Ҏ?/td>

int
getModifiers()

          q回此类或接口以整数~码?Java 语言修饰W?/td>

String
getName()

          ?String 的Ş式返回此 Class
对象所表示的实体(cR接口、数l类、基本类型或 voidQ名U?/td>

Package
getPackage()

          获取此类的包?/td>

ProtectionDomain
getProtectionDomain()

          q回该类?ProtectionDomain?/td>

URL
getResource(String name)

          查找带有l定名称的资源?/td>

InputStream
getResourceAsStream(String name)

          查找hl定名称的资源?/td>

Object[]
getSigners()

          获取此类的标记?/td>

String
getSimpleName()

          q回源代码中l出的底层类的简U?/td>

Class<? super T>
getSuperclass()

          q回表示?Class 所表示的实体(cR接口、基本类型或 voidQ的类?Class?/td>

TypeVariable<Class<T>>[]
getTypeParameters()

          按声明顺序返?TypeVariable 对象的一个数l,q些对象表示用此
GenericDeclaration 对象所表示的常规声明来声明的类型变量?/td>

boolean
isAnnotation()

          如果?Class 对象表示一个注释类型则q回 true?/td>

boolean
isAnnotationPresent(Class<? extends Annotation> annotationClass)

          如果指定cd的注释存在于此元素上Q则q回 trueQ否则返?false?/td>

boolean
isAnonymousClass()

          当且仅当底层cL匿名cLq回 true?/td>

boolean
isArray()

          判定?Class 对象是否表示一个数l类?/td>

boolean
isAssignableFrom(Class<?> cls)
          判定?
Class
对象所表示的类或接口与指定?Class 参数所表示的类或接口是否相同,或是否是其超cL接口?/td>

boolean
isEnum()

          当且仅当该类声明为源代码中的枚D时返?true?/td>

boolean
isInstance(Object obj)

          判定指定?Object 是否与此 Class
所表示的对象赋值兼宏V?/td>

boolean
isInterface()

          判定指定?Class 对象是否表示一个接口类型?/td>

boolean
isLocalClass()

          当且仅当底层cL本地cLq回 true?/td>

boolean
isMemberClass()

          当且仅当底层cL成员cLq回 true?/td>

boolean
isPrimitive()

          判定指定?Class 对象是否表示一个基本类型?/td>

boolean
isSynthetic()

          如果此类是复合类Q则q回 trueQ否?false?/td>

T
newInstance()

          创徏?Class 对象所表示的类的一个新实例?/td>

String
toString()

          对象{换ؓ字符丌Ӏ?/td>


]]>
վ֩ģ壺 | | | | | ԭ| | | ƽ| | | | | ½| ٸ| ʯ| | | | | | | | | Զ| ̨| | | Ԫ| ƽ| | | ˮ| ˳| Ϫ| | | Դ| ֦| | |